﻿// Inner Fire 游戏引擎库
// loader - 载入器
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 所属层级：基础结构层(1)
// 由XML中读取一个名称，在合适的时候，获得一个指针
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-29

#pragma once

#include <functional>
#include <static_string.h>

namespace ikit {

template <typename T> struct rinfo {
public:
  sstr name;

public:
  // 构造函数
  rinfo(sstr _name) : name(_name), pointer(nullptr) {}
  // 通过一个指针初始化的时候，loaded设置为true，不需要再查找
  rinfo(sstr _name, T* _ptr) : name(_name), pointer(_ptr) {}

  // 是否为空
  bool empty() const { return name.empty(); }

  // 单独获得指针，必须确保已经被载入
  inline T* get() const { return pointer; }

  // 设置一个指针
  inline void set(T* value) { pointer = value; }

  // 显式转换为 bool（支持 if (info) 判断）
  explicit operator bool() const noexcept { return pointer != nullptr; }

  // 操作符重载（核心修改）
  T* operator->() const {
    return pointer; // 直接返回裸指针
  }

private:
  T* pointer;
};

} // namespace ikit